package com.dckj.auto.common.utils;




import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.StringUtils;


import java.util.*;

/**
 * json工具类
 *
 * @author Wangdong
 */
public class JsonUtils {


    /**
     * 返回消息key
     */
    private static final String MSG_KEY = "message";

    /**
     * 返回状态码key
     */
    private static final String STATE_KEY = "state";

  /**
     * 返回数据key
     */
    private static final String RES_KEY = "data";

    /**
     * 返回成功状态码
     */
    private static final Integer SUCCESS_STATE = 200;


    /**
     * 返回错误的请求
     */
    private static final Integer ERROR_REQUEST = 400;

    /**
     * 返回服务器错误状态码
     */
    private static final Integer ERROR_STATE = 500;






    /**
     * @param message msg
     * @return <br><b>作者： @author WangDong</b>
     * <br>创建时间：2016年9月14日 上午11:21:10
     * @since 1.0
     */
    public static JSONObject success(String message) {
        return result(SUCCESS_STATE, message, null);
    }


    /**
     * @param data data
     * @param count count
     * @return <br><b>作者： @author WangDong</b>
     * <br>创建时间：2016年9月14日 上午11:21:10
     * @since 1.0
     */
    public static JSONObject successTree(Object data,Integer count) {
        JSONObject result = new JSONObject();
        result.put("code", 0);
        result.put("msg", "ok");
        result.put("count", count);
        result.put("data", data);
        return  result;
    }







    /**
     * @param message msg
     * @return <br><b>作者： @author WangDong</b>
     * <br>创建时间：2016年9月14日 上午11:21:10
     * @since 1.0
     */
    public static JSONObject success(String message, Object data) {
        return result(SUCCESS_STATE, message, data);
    }


   /**
     * @return <br><b>作者： @author WangDong</b>
     * <br>创建时间：2016年9月14日 上午11:21:10
     * @since 1.0
     */
    public static JSONObject success( Object data) {
        return result(SUCCESS_STATE, "", data);
    }
    public static JSONObject succJson( Object data) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("array",data);
        return result(SUCCESS_STATE, "", jsonObject);
    }


    /**
     * @return <br><b>作者： @author WangDong</b>
     * <br>创建时间：2016年9月14日 上午11:21:10
     * @since 1.0
     */
    public static JSONObject success( Object data,Page page) {
        return result(SUCCESS_STATE, "", data,page);
    }




    /**
     * 返回系统失败JSON
     *
     * @param message msg
     * @return String
     */
    public static JSONObject error(String message) {
        return result(ERROR_STATE, message, "");
    }


    /**
     * 返回系统失败JSON
     *
     * @param message msg
     * @return String
     */
    public static JSONObject error(boolean if500, String message) {
        return result(if500?ERROR_STATE:ERROR_REQUEST, message, null);
    }


    /**
     * 返回系统失败JSON
     *
     * @param message msg
     * @return String
     */
    public static JSONObject error(Integer state, String message) {
        return result(state, message, null);
    }

    public static JSONObject toPage(Page page){
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,"查询成功");
        result.put(RES_KEY, page.getRecords());
        result.put("totalRow", page.getTotal());
        result.put("pageSize", page.getSize());
        result.put("pageNumber", page.getCurrent());
        result.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        return result;
    }


    public static JSONObject toPage(Page page,Object object){
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,"查询成功");
        result.put(RES_KEY, object);
        result.put("totalRow", page.getTotal());
        result.put("pageSize", page.getSize());
        result.put("pageNumber", page.getCurrent());
        result.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        return result;
    }



    public static JSONObject toPageApp(Page page,Object object){
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,"查询成功");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("array",object);
        jsonObject.put("totalRow", page.getTotal());
        jsonObject.put("pageSize", page.getSize());
        jsonObject.put("pageNumber", page.getCurrent());
        jsonObject.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        result.put(RES_KEY, jsonObject);
        return result;
    }

    public static JSONObject toPageApp(Page page,Object object,Map<String,Object> maps){
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,"查询成功");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("array",object);
        if(null != maps ){
            for(String key :maps.keySet()){
                jsonObject.put(key,maps.get(key));
            }
        }
        jsonObject.put("totalRow", page.getTotal());
        jsonObject.put("pageSize", page.getSize());
        jsonObject.put("pageNumber", page.getCurrent());
        jsonObject.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        result.put(RES_KEY, jsonObject);
        return result;
    }




    public static JSONObject toPage(Page page,Object object,String[] keys,Object... data){
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,"查询成功");
        result.put(RES_KEY, object);
        for (int i=0; i<data.length ;i++){
            result.put(keys[i],data[i]);
        }
        result.put("totalRow", page.getTotal());
        result.put("pageSize", page.getSize());
        result.put("pageNumber", page.getCurrent());
        result.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        return result;
    }



    public static JSONObject toPage(String message,Page page,Object object){
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,message);
        result.put(RES_KEY, object);
        result.put("totalRow", page.getTotal());
        result.put("pageSize", page.getSize());
        result.put("pageNumber", page.getCurrent());
        result.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        return result;
    }


    public static JSONObject toPage(JSONObject json){
        List<JSONObject> list = new ArrayList<>();
        list.add(json);
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,"查询成功");
        result.put(RES_KEY, list);
        result.put("totalRow", 1);
        result.put("pageSize", 1);
        result.put("pageNumber", 1);
        result.put("totalPage", 1);
        return result;
    }


    /**
     * @param message message
     * @return <br><b>作者： @author WangDong</b>
     * <br>创建时间：2016年9月14日 上午11:21:10
     * @since 1.0
     */
    public static JSONObject toPage(String message, Page page) {
        JSONObject result = new JSONObject();
        result.put(STATE_KEY,SUCCESS_STATE);
        result.put(MSG_KEY,StringUtils.isEmpty(message)?"查询数据成功":message);
        result.put(RES_KEY, page.getRecords());
        result.put("totalRow", page.getTotal());
        result.put("pageSize", page.getSize());
        result.put("pageNumber", page.getCurrent());
        result.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        return result;
    }




    /**
     * 封装通用JSON返回结果
     *
     * @param state 状态码
     * @param message     返回消息
     * @param data     返回数据
     * @return JSONObject
     */
    public static JSONObject result(Integer state, String message,Object data) {
        JSONObject result = new JSONObject();
        if(StringUtils.isNotEmpty(message)){
            if(StringUtils.isEmpty(message)) {
                if (state.equals(SUCCESS_STATE)) {
                    message = "操作成功！";
                }
                if (state.equals(ERROR_REQUEST)) {
                    message = "请求错误...";
                }
                if (state.equals(ERROR_STATE)) {
                    message = "服务器开小差了...";
                }
            }else{
                if (state.equals(SUCCESS_STATE) && !message.contains("成功")) {
                    message += "成功";
                }
                if ((state.equals(ERROR_REQUEST) || state.equals(ERROR_STATE))  && !message.contains("失败")) {
                    message += "失败";
                }
            }
        }
        result.put(STATE_KEY, state);
        result.put(MSG_KEY, message);
        if(null != data){
            result.put(RES_KEY, data);
        }
        return  result;
    }





    /**
     * 封装通用JSON返回结果
     *
     * @param state 状态码
     * @param message     返回消息
     * @param data     返回数据
     * @return JSONObject
     */
    public static JSONObject result(Integer state, String message,Object data,Page page) {
        JSONObject result = new JSONObject();
        if("".equals(message)){
            if (state.equals(SUCCESS_STATE)) {
                message = "获取数据成功！";
            }
        }
        result.put(STATE_KEY, state);
        result.put(MSG_KEY, message);
        if(null != data){
            result.put(RES_KEY, data);
        }
        result.put("totalRow", page.getTotal());
        result.put("pageSize", page.getSize());
        result.put("pageNumber", page.getCurrent());
        result.put("totalPage", ( page.getTotal() - 1) / page.getSize() + 1);
        return  result;
    }

    public static JSONArray JSONArray(String list){
        return JSON.parseArray(list);
    }

    public static void main(String[] args) {
        String s = "30044e38dd844205b3af892d122c78a5,c9e5d37ef473460fa66a70c6f2351696";
        String  ss = "c7b15cb35d8049e381e523d2172d7a46";
        int indexOf = s.indexOf(ss);
        /*System.out.println(new Date().getTime());*/
//        int a=(int)Math.random()*10;
       // System.out.println(indexOf);
//        System.out.println(StringUtil.createOrderNo("123456"));
           /* String count="aaa,aaa,aaa,";
            System.out.println(count.substring(0,count.length()-1));*/

        /*List<HashMap> list = new ArrayList<>();
        HashMap map=new HashMap();
        map.put("index","A");

        list.add(map);

        System.out.println(JsonUtils.errorJson(" s ",list));
        System.out.println(JsonUtils.error(" s "));
        System.out.println(JsonUtils.success(" s "));*/
        Integer s1 = StringUtil.getRandom(1,30);
        System.out.println(s1);
    }
}
